namespace study6_05 {


    // Omit 省略
    // 用于从一个类型中排除指定的属性

    // Omit<T, K>
    // T 是原始类型
    // K 是要从T中排除的属性的联合类型


    // 示例 1:基本示例
    // 定义一个 User 类型
    interface User {
        id: number;
        name: string;
        email: string;
        password: string;
    }
    // 使用 Omit 创建一个新类型，不包含 password 属性
    type UserWithoutPassword = Omit<User, 'password'>

    // 创建一个符合 UserWithoutPassword 类型的对象
    let user: UserWithoutPassword = {
        name: 'lwj',
        id: 1,
        email: 'asd'
    }
    console.log(user);

    // 示例 2： 与类型合并
    // 可以将 Omit 与其他类型操作结合使用。

    // 例如，结合 Partial 类型来创建一个可选的用户类型，排除 id 属性
    interface User2 {
        id: number;
        name: string;
        email: string;
        password: string;
    }

    type PartialUserWithoutId = Partial<Omit<User2, 'id'>>

    let updateUser: PartialUserWithoutId = {
        email: 'ads',
        name: 'sad'
    }
    console.log(updateUser);

    // updateUser 的属性
    // type PartialUserWithoutId = {
    //     password?: string | undefined;
    //     name?: string | undefined;
    //     email?: string | undefined;
    // }



    // 示例3：排除多个属性
    // Omit 也可以用来排除多个属性。

    // 例如，排除 email 和 password 属性：
    interface User3 {
        id: number;
        name: string;
        email: string;
        password: string;
    }

    type UserWithoutEmailAndPassword = Omit<User3, 'email' | 'password'>

    let userWithoutEmailAndPassword: UserWithoutEmailAndPassword = {
        id: 3,
        name: 'Cui'
    }
        console.log(userWithoutEmailAndPassword);
        


}